public class View {

    Service list; // 农产品管理服务

    // 构造方法，用于初始化农产品管理系统视图
    public View(int Maxlength) {
        list = new Service(Maxlength);
        System.out.println();
        System.out.println("初始化完成!");
        System.out.println();
    }

    // 显示系统菜单并处理用户输入
    public void menu() {
        boolean loop = true;
        while (loop) {
            System.out.println("============农产品管理系统============");
            System.out.println("\t\t\t1. 添加农产品");
            System.out.println("\t\t\t2. 删除农产品");
            System.out.println("\t\t\t3. 修改农产品");
            System.out.println("\t\t\t4. 查询农产品");
            System.out.println("\t\t\t5. 农产品列表");
            System.out.println("\t\t\t6. 退出本系统\n");
            System.out.print("请输入你的选择：");
            int key = Read.readMenu();
            System.out.println();
            switch (key) {
                case 1:
                    addProducts(); // 添加农产品
                    break;
                case 2:
                    deleteProducts(); // 删除农产品
                    break;
                case 3:
                    modifyProducts(); // 修改农产品
                    break;
                case 4:
                    findProducts(); // 查询农产品
                    break;
                case 5:
                    showProducts(); // 显示农产品列表
                    break;
                case 6:
                    loop = false; // 退出系统
                    break;
            }
            System.out.println();
        }
    }

    // 添加农产品
    private void addProducts() {
        if (list.isFull()) {
            System.out.println("当前农产品列表已满,无法添加!");
        } else {
            Products p = new Products();
            System.out.print("请输入农产品名称\t：");
            p.setName(Read.readString());
            System.out.print("请输入农产品生产数量\t：");
            p.setCount(Read.readInt());
            System.out.print("请输入农产品生产日期\t：");
            p.setDate(Read.readString());
            System.out.print("请输入农产品价格\t：");
            p.setPrice(Read.readDouble());
            boolean add = list.add(p);
            if (add) {
                System.out.println("==========添加成功==========");
            } else {
                System.out.println("==========添加失败==========");
            }
        }
    }

    // 删除农产品
    private void deleteProducts() {
        if (list.isEmpty()) {
            System.out.println("当前农产品列表为空,无法删除!");
        } else {
            System.out.println("请选择删除方式(1. 按编号删除 : 2. 按名称删除 : -1 退出删除)");
            int key = Read.readInt();
            while (key != 1 && key != 2 && key != -1) {
                System.out.println("您输入的不是 1/2/-1 请重新输入");
                key = Read.readInt();
            }
            if (key == -1) {
                System.out.println("已取消删除!");
            } else {
                if (key == 1) {
                    System.out.println("请输入你要删除农产品的编号");
                    int index = Read.readInt();
                    boolean delete = list.delete(--index);
                    if (delete)
                        System.out.println("删除成功!");
                    else
                        System.out.println("删除失败,请检查您输入的编号是否存在");
                } else {
                    System.out.println("请输入你要删除农产品的名称");
                    String name = Read.readString();
                    boolean delete = list.delete(name);
                    if (delete)
                        System.out.println("删除成功!");
                    else
                        System.out.println("删除失败,请检查您输入的名称是否存在");
                }
            }
        }
    }

    // 修改农产品信息
    public void modifyProducts() {
        if (list.isEmpty()) {
            System.out.println("当前农产品列表为空,无法删除!");
        } else {
            System.out.println("请输入你要修改农产品的编号");
            int index = Read.readInt();
            Products p = list.get(--index);
            if (p == null) {
                System.out.println("未查询到该产品, 请检查您输入的编号是否存在");
                return;
            }
            System.out.printf("查询到农产品信息为:编号：%s 名称：%s 数量：%s 上市时间：%s 单价(元/斤)：%s\n", index + 1, p.getName(),
                    p.getCount(), p.getDate(), p.getPrice());
            System.out.println("是否修改(Y/N)");
            char key = Read.readChar();
            if (key == 'Y') {
                System.out.println("开始修改<某参数下回车表示不修改该参数>");
                System.out.println("请输入农产品的新名称\t：");
                p.setName(Read.readString(p.getName()));
                System.out.print("请输入农产品的新生产数量\t：");
                p.setCount(Read.readInt(p.getCount()));
                System.out.print("请输入农产品的新生产日期\t：");
                p.setDate(Read.readString(p.getDate()));
                System.out.print("请输入农产品的新价格\t：");
                p.setPrice(Read.readDouble(p.getPrice()));
                System.out.println("修改成功!");
                System.out.printf("查询到农产品信息为:编号：%s 名称：%s 数量：%s 上市时间：%s 单价(元/斤)：%s\n", index + 1, p.getName(),
                        p.getCount(), p.getDate(), p.getPrice());
            } else if (key == 'N') {
                System.out.println("已退出修改!");
            }
        }
    }

    // 查询农产品信息
    public void findProducts() {
        if(list.isEmpty()) {
            System.out.println("当前农产品列表为空,无法查询!");
        }else {
            System.out.println("请选择查询方式(1. 按编号查询 : 2. 按名称查询 : -1 退出查询)");
            int key = Read.readInt();
            while(key != 1 && key != 2 && key != -1){
                System.out.println("您输入的不是 1/2/-1 请重新输入");
                key = Read.readInt();
            }
            if(key == -1){
                System.out.println("已取消查询!");
            }else {
                if (key == 1){
                    System.out.println("请输入你要查询农产品的编号");
                    int index = Read.readInt();
                    Products p = list.get(--index);
                    if(p == null) System.out.println("未查询到该产品, 请检查您输入的编号是否存在");
                    else System.out.printf("查询到农产品信息为:名称：%s 数量：%s 上市时间：%s 单价(元/斤)：%s\n", p.getName(), p.getCount(), p.getDate(), p.getPrice());
                }else {
                    System.out.println("请输入你要查询农产品的名称");
                    String name = Read.readString();
                    Products p = list.get(name);
                    if(p == null) System.out.println("未查询到该产品, 请检查您输入的编号是否存在");
                    else System.out.printf("查询到农产品信息为:名称：%s 数量：%s 上市时间：%s 单价(元/斤)：%s\n", p.getName(), p.getCount(), p.getDate(), p.getPrice());
                }
            }
        }
    }

    //展示农产品列表
    public void showProducts(){
        if(list.isEmpty()) {
            System.out.println("当前农产品列表为空!");
        }else {
            System.out.println("===================当前农产品列表===================");
            System.out.printf("%-6s %-6s %-6s %-12s %-4s", "编号", "名称", "数量", "上市时间", "单价(元/斤)\n");
            System.out.println(list);
            System.out.println("===================查询完毕===================");
        }
    }
}
